Como es habitual, cargamos las librerías que necesitamos al inicio del documento.

Qualitative Bankruptcy Data Set

Utilizaremos una versión parecida del conjunto de datos Qualitative_Bankruptcy Data Set del repositorio UCI Machine Learning para trabajar el estudio de las variables Categóricas/Cualitativas y la bondad de las reglas de Asociación para extraer conocimiento de un conjunto de datos, en este caso, predecir la bancarrota (Bankruptcy) en base a parámetros cuantitativos/cualitativos preparados por expertos.

Cargamos el fichero Qualitative_Bankruptcy.num.txt y creamos el data.frame QB.

Asignamos nombres válidos a las columnas del data.frame (make.names se usa para asegurarnos que no contiene símbolos raros). Hay más información en el fichero Qualitative_Bankruptcy.info.txt

La información sobre este conjunto de datos se muestra a continuación:

'data.frame':   250 obs. of  7 variables:
 $ Industrial.Risk      : num  9.5487 0.0871 6.0553 8.3944 1.2821 ...
 $ Management.Risk      : num  9.53 1.79 4.92 9.55 1 ...
 $ Financial.Flexibility: num  5.34 4.52 4.32 8.88 9.39 ...
 $ Credibility          : num  6.3 4.12 3.69 9.54 8.34 ...
 $ Competitiveness      : num  5.74 4.4 3.74 9.7 9.61 ...
 $ Operating.Risk       : num  9.3 1.84 5.55 9.77 1.31 ...
 $ Bankruptcy           : Factor w/ 2 levels "B","NB": 2 2 2 2 2 2 2 2 2 2 ...
  Industrial.Risk Management.Risk Financial.Flexibility Credibility Competitiveness Operating.Risk
1      9.54873698        9.531917              5.335235    6.304893        5.741153       9.298113
2      0.08713305        1.785630              4.517538    4.118767        4.399522       1.842645
3      6.05525601        4.918437              4.322067    3.692966        3.738189       5.549685
4      8.39444838        9.551693              8.884186    9.538757        9.698978       9.773618
5      1.28213393        1.001431              9.394542    8.343431        9.610833       1.307226
6      5.06348125        5.305187              9.518323    8.678203        9.990089       5.149863
  Bankruptcy
1         NB
2         NB
3         NB
4         NB
5         NB
6         NB

En primer lugar, para poner un poco de contexto de lo que estamos haciendo, se explica un poco las variables que aparecen en el conjunto de datos.

Estas variables, en resumen, nos proporcionan una visión holística de la salud financiera y operativa de una empresa, lo que permite a los analistas y inversores evaluar su riesgo de bancarrota (relacionado con Bankruptcy).

Las variables numéricas representan un valor entre 0 y 10 e indican la valoración del experto para cada variable. Discretizaremos estas en 3 factores ordenados QB de manera no supervisada, con el objetivo de estimar la clase Bankruptcy.

La etiqueta asociada a valores bajos será N (negative), la etiqueta de valores altos será P (positive) y el resto corresponderá a la etiqueta A (average).

Se utiliza la función discretize() del paquete arules con cada método que este nos ofrece (interval, frequency y cluster).

Nos aseguramos que todas las variables son factores de 3 niveles ordenados que además respetan N < A < P. Además, la primera clase de Bankruptcy será la de etiqueta B (bancarrota).

[1] "Para el método interval el primer nivel de la clase Bankruptcy es: B"
[1] "Para el método frequency el primer nivel de la clase Bankruptcy es: B"
[1] "Para el método cluster el primer nivel de la clase Bankruptcy es: B"
List of 3
 $ interval :'data.frame':  250 obs. of  7 variables:
  ..$ Industrial.Risk      : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
  ..$ Management.Risk      : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
  ..$ Financial.Flexibility: Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 2 3 2 1 ...
  ..$ Credibility          : Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 3 2 3 2 ...
  ..$ Competitiveness      : Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 3 2 2 3 ...
  ..$ Operating.Risk       : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
  ..$ Bankruptcy           : Factor w/ 2 levels "B","NB": 2 2 2 2 2 2 2 2 2 2 ...
 $ frequency:'data.frame':  250 obs. of  7 variables:
  ..$ Industrial.Risk      : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
  ..$ Management.Risk      : Ord.factor w/ 3 levels "N"<"A"<"P": 3 2 2 3 1 2 3 3 3 3 ...
  ..$ Financial.Flexibility: Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 2 3 3 2 ...
  ..$ Credibility          : Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 3 2 3 2 ...
  ..$ Competitiveness      : Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 3 2 2 3 ...
  ..$ Operating.Risk       : Ord.factor w/ 3 levels "N"<"A"<"P": 3 2 2 3 1 2 3 3 3 3 ...
  ..$ Bankruptcy           : Factor w/ 2 levels "B","NB": 2 2 2 2 2 2 2 2 2 2 ...
 $ cluster  :'data.frame':  250 obs. of  7 variables:
  ..$ Industrial.Risk      : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
  ..$ Management.Risk      : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
  ..$ Financial.Flexibility: Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 2 3 2 2 ...
  ..$ Credibility          : Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 3 2 3 2 ...
  ..$ Competitiveness      : Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 3 2 2 3 ...
  ..$ Operating.Risk       : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
  ..$ Bankruptcy           : Factor w/ 2 levels "B","NB": 2 2 2 2 2 2 2 2 2 2 ...

Análisis Cualitativo

Realizaremos a continuación un breve estudio del conjunto discretizado para determinar si es apropiado resolver el problema de clasificación correcta de la variable Bankruptcy.

Análisis univariante de las variables Cualitativas

A continuación, se calculan las tablas de frecuencia correspondientes a cada una de las clases discretizadas anteriormente. Estas se mostrarán de una manera visual con gráficos de barras, haciéndose una diferencia entre los distintos tipos de method en el discretize().

$interval
Figure 1. Frecuencias para las distintas variables con los distintos métodos\label{fig:grafico_frecuencias_porcentajes}

Figure 1. Frecuencias para las distintas variables con los distintos métodos


$frequency
Figure 1. Frecuencias para las distintas variables con los distintos métodos\label{fig:grafico_frecuencias_porcentajes}

Figure 1. Frecuencias para las distintas variables con los distintos métodos


$cluster
Figure 1. Frecuencias para las distintas variables con los distintos métodos\label{fig:grafico_frecuencias_porcentajes}

Figure 1. Frecuencias para las distintas variables con los distintos métodos

Observamos cómo las frecuencias dependen en medida de cómo se ejecuta la discretización de las variables numéricas a categóricas con la función discretize() y sus diferentes method. Aparece una mayor diferencia en el método frequency, en el que las variables anteriormente numéricas (todas menos Bankruptcy) pasan a tener todas las categorías con igualdad de frecuencia para cada una de las clases.

Por otra parte, los métodos interval y cluster son muy similares en este caso.

Figure 2. Diferencias a la hora de discretizar entre los distintos métodos\label{fig:plot_diferencia_discretize}

Figure 2. Diferencias a la hora de discretizar entre los distintos métodos

En estos gráficos puede apreciarse lo que se comentó anteriormente de las diferencias entre los distintos métodos para discretizar.

Observamos que la discretización por cluster y interval ha cogido como valor N (Negative) aproximadamente entre 0 y 3. La categoría A (Average) queda entre 3 y 7, mientras que la de P (Positive) de 7 a 10.

Hemos visto también que en estas dos formas de discretización se asignan más valores de N que de las otras categorías para todas las variables del conjunto de datos. Esto nos puede llevar a pensar que ha habido cierta tendencia a valorar de manera algo estricta las cosas.

Análisis bivariante de las variables Cualitativas

Pasamos a obtener la relación entre las variables (matrices de contingencia). Determinaremos el grado de asociación utilizando la V de Cramer (CramerV).

Utilizaremos la función PairApply de la libería DescTools para calcular estadísticos para todos los pares. La función PlotCorr permite representar estos resultados.

Representamos la matriz de valores de coeficientes de Cramer, medida que nos informa sobre la asociación entre variables categóricas. Es una versión normalizada del estadístico de chi-cuadrado, oscilando su valor entre 0 y 1.

$interval
                      Industrial.Risk Management.Risk Financial.Flexibility Credibility
Industrial.Risk            1.00000000       0.2768026             0.1278990  0.07578456
Management.Risk            0.27680255       1.0000000             0.1721687  0.22235111
Financial.Flexibility      0.12789902       0.1721687             1.0000000  0.43285224
Credibility                0.07578456       0.2223511             0.4328522  1.00000000
Competitiveness            0.18638785       0.2356602             0.5351123  0.51383238
Operating.Risk             0.19011872       0.2112877             0.1525809  0.19367362
Bankruptcy                 0.24657118       0.3540167             0.7987151  0.77695269
                      Competitiveness Operating.Risk Bankruptcy
Industrial.Risk             0.1863878      0.1901187  0.2465712
Management.Risk             0.2356602      0.2112877  0.3540167
Financial.Flexibility       0.5351123      0.1525809  0.7987151
Credibility                 0.5138324      0.1936736  0.7769527
Competitiveness             1.0000000      0.2070005  0.9439226
Operating.Risk              0.2070005      1.0000000  0.2839357
Bankruptcy                  0.9439226      0.2839357  1.0000000

$frequency
                      Industrial.Risk Management.Risk Financial.Flexibility Credibility
Industrial.Risk            1.00000000       0.1755159             0.1913789  0.07567993
Management.Risk            0.17551590       1.0000000             0.1490586  0.22467354
Financial.Flexibility      0.19137892       0.1490586             1.0000000  0.32962192
Credibility                0.07567993       0.2246735             0.3296219  1.00000000
Competitiveness            0.20318692       0.2272072             0.4249897  0.44882799
Operating.Risk             0.12935814       0.1464825             0.1676059  0.18584326
Bankruptcy                 0.23529894       0.3529663             0.6769425  0.75864839
                      Competitiveness Operating.Risk Bankruptcy
Industrial.Risk             0.2031869      0.1293581  0.2352989
Management.Risk             0.2272072      0.1464825  0.3529663
Financial.Flexibility       0.4249897      0.1676059  0.6769425
Credibility                 0.4488280      0.1858433  0.7586484
Competitiveness             1.0000000      0.1573110  0.8492680
Operating.Risk              0.1573110      1.0000000  0.2744670
Bankruptcy                  0.8492680      0.2744670  1.0000000

$cluster
                      Industrial.Risk Management.Risk Financial.Flexibility Credibility
Industrial.Risk             1.0000000       0.2902444             0.1403234   0.0839629
Management.Risk             0.2902444       1.0000000             0.1881195   0.2224409
Financial.Flexibility       0.1403234       0.1881195             1.0000000   0.4511258
Credibility                 0.0839629       0.2224409             0.4511258   1.0000000
Competitiveness             0.1944503       0.2582474             0.5645759   0.5371390
Operating.Risk              0.1981832       0.2252978             0.1602153   0.2002050
Bankruptcy                  0.2532646       0.3600621             0.8127894   0.7923489
                      Competitiveness Operating.Risk Bankruptcy
Industrial.Risk             0.1944503      0.1981832  0.2532646
Management.Risk             0.2582474      0.2252978  0.3600621
Financial.Flexibility       0.5645759      0.1602153  0.8127894
Credibility                 0.5371390      0.2002050  0.7923489
Competitiveness             1.0000000      0.2080175  0.9682845
Operating.Risk              0.2080175      1.0000000  0.2838725
Bankruptcy                  0.9682845      0.2838725  1.0000000

La última columna corresponde a los valores que tienen las distintas variables predictoras con la variable Bankruptcy. Un valor de CramerV superior a 0.7 está catalogado como una fuerte relación entre variables categóricas (ver ?Cramer), implicando que Financial.Flexibility, Credibility y, sobre todo Competitiveness, muestran una clara dependencia sobre el valor obtenido paraBankruptcy.

Se muestran a continuación las matrices de contingencia entre las diferentes variables respecto a Bankruptcy.

$interval
$interval[[1]]
          Industrial.Risk
Bankruptcy  N  A  P
        B  55 25 27
        NB 39 49 55

$interval[[2]]
          Management.Risk
Bankruptcy  N  A  P
        B  73 21 13
        NB 48 44 51

$interval[[3]]
          Financial.Flexibility
Bankruptcy   N   A   P
        B  102   4   1
        NB  21  63  59

$interval[[4]]
          Credibility
Bankruptcy  N  A  P
        B  87 16  4
        NB  9 53 81

$interval[[5]]
          Competitiveness
Bankruptcy   N   A   P
        B  104   3   0
        NB   4  47  92

$interval[[6]]
          Operating.Risk
Bankruptcy  N  A  P
        B  64 23 20
        NB 50 30 63


$frequency
$frequency[[1]]
          Industrial.Risk
Bankruptcy  N  A  P
        B  49 31 27
        NB 34 52 57

$frequency[[2]]
          Management.Risk
Bankruptcy  N  A  P
        B  50 41 16
        NB 33 42 68

$frequency[[3]]
          Financial.Flexibility
Bankruptcy  N  A  P
        B  70 35  2
        NB 13 48 82

$frequency[[4]]
          Credibility
Bankruptcy  N  A  P
        B  78 25  4
        NB  5 58 80

$frequency[[5]]
          Competitiveness
Bankruptcy  N  A  P
        B  83 24  0
        NB  0 59 84

$frequency[[6]]
          Operating.Risk
Bankruptcy  N  A  P
        B  48 38 21
        NB 35 45 63


$cluster
$cluster[[1]]
          Industrial.Risk
Bankruptcy  N  A  P
        B  54 27 26
        NB 37 52 54

$cluster[[2]]
          Management.Risk
Bankruptcy  N  A  P
        B  73 21 13
        NB 47 45 51

$cluster[[3]]
          Financial.Flexibility
Bankruptcy   N   A   P
        B  102   4   1
        NB  19  66  58

$cluster[[4]]
          Credibility
Bankruptcy  N  A  P
        B  87 16  4
        NB  7 57 79

$cluster[[5]]
          Competitiveness
Bankruptcy   N   A   P
        B  104   3   0
        NB   1  50  92

$cluster[[6]]
          Operating.Risk
Bankruptcy  N  A  P
        B  64 24 19
        NB 50 32 61

Observamos que en los casos mencionados anteriormente concuerdan con lo que se dijo de una alta relación. Es fácil ver que una Financial.Flexibility negativa (N) suele llevar a tener bancarrota (Bankruptcy en B). Por el contrario, una positiva tiene fuerte relación a lo contrario. De manera similar pasa con Credibility y Competitiveness.

Contrastaremos los resultados con los gráficos de Mosaico de los casos más relevantes. Por cuestiones de no saturar con demasiados plots, se muestra lo que ocurre con el método de cluster (similar a lo que ocurre con interval).

  • En el caso de los mosaicos, los “Pearson residuals” indican si la proporción de casos observados en cada celda es mayor o menor de lo esperado bajo la independencia.

  • En el caso de las asociaciones, los “Pearson residuals” se utilizan para resaltar las celdas de la tabla de contingencia que contribuyen más a la asociación observada entre las variables.

Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).\label{fig:mosaic_plots}

Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).

Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).\label{fig:mosaic_plots}

Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).

Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).\label{fig:mosaic_plots}

Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).

Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).\label{fig:mosaic_plots}

Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).

Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).\label{fig:mosaic_plots}

Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).

Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).\label{fig:mosaic_plots}

Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).

Puede verse claramente lo que se comentaba anteriormente. En estas 3 variables hay cierta predisposición a que no haya bancarrota si se tiene un resultado Average o Positive (sobre todo). Justamente con Negative hay predisposición a lo contrario, entrar en bancarrota.

Reglas de Asociación

Encontrar las reglas de asociación básicamente significa encontrar que elementos aparecen juntos con más frecuencia que otros.

Transformaremos en primer lugar el conjunto de datos en forma de data.frame en transactions con el nombre QBt. Se hace un summary() de esta nueva estructura.

Se muestra los resultados a partir de ahora solo con el método de cluster, puesto que consideramos que es el que mejor se adapta a la estructura subyacente en nuestro conjunto de datos. De todas formas, al final se mostrará la accuracy que se obtendría con las otras formas de discretizar.

transactions as itemMatrix in sparse format with
 250 rows (elements/itemsets/transactions) and
 20 columns (items) and a density of 0.35 

most frequent items:
          Bankruptcy=NB Financial.Flexibility=N       Management.Risk=N        Operating.Risk=N 
                    143                     121                     120                     114 
           Bankruptcy=B                 (Other) 
                    107                    1145 

element (itemset/transaction) length distribution:
sizes
  7 
250 

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      7       7       7       7       7       7 

includes extended item information - examples:
             labels       variables levels
1 Industrial.Risk=N Industrial.Risk      N
2 Industrial.Risk=A Industrial.Risk      A
3 Industrial.Risk=P Industrial.Risk      P

includes extended transaction information - examples:
  transactionID
1             1
2             2
3             3
                    labels             variables levels
1        Industrial.Risk=N       Industrial.Risk      N
2        Industrial.Risk=A       Industrial.Risk      A
3        Industrial.Risk=P       Industrial.Risk      P
4        Management.Risk=N       Management.Risk      N
5        Management.Risk=A       Management.Risk      A
6        Management.Risk=P       Management.Risk      P
7  Financial.Flexibility=N Financial.Flexibility      N
8  Financial.Flexibility=A Financial.Flexibility      A
9  Financial.Flexibility=P Financial.Flexibility      P
10           Credibility=N           Credibility      N
11           Credibility=A           Credibility      A
12           Credibility=P           Credibility      P
13       Competitiveness=N       Competitiveness      N
14       Competitiveness=A       Competitiveness      A
15       Competitiveness=P       Competitiveness      P
16        Operating.Risk=N        Operating.Risk      N
17        Operating.Risk=A        Operating.Risk      A
18        Operating.Risk=P        Operating.Risk      P
19            Bankruptcy=B            Bankruptcy      B
20           Bankruptcy=NB            Bankruptcy     NB
 [1] "Industrial.Risk=N"       "Industrial.Risk=A"       "Industrial.Risk=P"      
 [4] "Management.Risk=N"       "Management.Risk=A"       "Management.Risk=P"      
 [7] "Financial.Flexibility=N" "Financial.Flexibility=A" "Financial.Flexibility=P"
[10] "Credibility=N"           "Credibility=A"           "Credibility=P"          
[13] "Competitiveness=N"       "Competitiveness=A"       "Competitiveness=P"      
[16] "Operating.Risk=N"        "Operating.Risk=A"        "Operating.Risk=P"       
[19] "Bankruptcy=B"            "Bankruptcy=NB"          

Como puede verse, tenemos un total de 250 filas / itemsets, así como 20 columnas / items que representan todas las posibilidades de variables con sus posibles niveles.

Los 5 items más frecuentes (con nivel correspondiente) se muestran a continuación.

Figure 4. Ítems más frecuentes en el conjunto de datos\label{fig:frequencyPlot}

Figure 4. Ítems más frecuentes en el conjunto de datos

Una tabla de contingencia entre todos los pares de variables (combinación de pares de items) se muestra a continuación:

                        Industrial.Risk=N Industrial.Risk=A Industrial.Risk=P Management.Risk=N
Industrial.Risk=N                      91                 0                 0                66
Industrial.Risk=A                       0                79                 0                22
Industrial.Risk=P                       0                 0                80                32
Management.Risk=N                      66                22                32               120
Management.Risk=A                      10                35                21                 0
Management.Risk=P                      15                22                27                 0
Financial.Flexibility=N                52                40                29                74
Financial.Flexibility=A                22                24                24                24
Financial.Flexibility=P                17                15                27                22
Credibility=N                          38                24                32                61
Credibility=A                          26                23                24                30
Credibility=P                          27                32                24                29
Competitiveness=N                      54                27                24                70
Competitiveness=A                      14                21                18                21
Competitiveness=P                      23                31                38                29
Operating.Risk=N                       52                25                37                65
Operating.Risk=A                       19                27                10                29
Operating.Risk=P                       20                27                33                26
Bankruptcy=B                           54                27                26                73
Bankruptcy=NB                          37                52                54                47
                        Management.Risk=A Management.Risk=P Financial.Flexibility=N
Industrial.Risk=N                      10                15                      52
Industrial.Risk=A                      35                22                      40
Industrial.Risk=P                      21                27                      29
Management.Risk=N                       0                 0                      74
Management.Risk=A                      66                 0                      27
Management.Risk=P                       0                64                      20
Financial.Flexibility=N                27                20                     121
Financial.Flexibility=A                21                25                       0
Financial.Flexibility=P                18                19                       0
Credibility=N                          24                 9                      84
Credibility=A                          18                25                      19
Credibility=P                          24                30                      18
Competitiveness=N                      21                14                      99
Competitiveness=A                      10                22                       7
Competitiveness=P                      35                28                      15
Operating.Risk=N                       23                26                      62
Operating.Risk=A                       22                 5                      32
Operating.Risk=P                       21                33                      27
Bankruptcy=B                           21                13                     102
Bankruptcy=NB                          45                51                      19
                        Financial.Flexibility=A Financial.Flexibility=P Credibility=N Credibility=A
Industrial.Risk=N                            22                      17            38            26
Industrial.Risk=A                            24                      15            24            23
Industrial.Risk=P                            24                      27            32            24
Management.Risk=N                            24                      22            61            30
Management.Risk=A                            21                      18            24            18
Management.Risk=P                            25                      19             9            25
Financial.Flexibility=N                       0                       0            84            19
Financial.Flexibility=A                      70                       0             6            28
Financial.Flexibility=P                       0                      59             4            26
Credibility=N                                 6                       4            94             0
Credibility=A                                28                      26             0            73
Credibility=P                                36                      29             0             0
Competitiveness=N                             4                       2            84            17
Competitiveness=A                            30                      16             4            21
Competitiveness=P                            36                      41             6            35
Operating.Risk=N                             25                      27            58            29
Operating.Risk=A                             12                      12            20            16
Operating.Risk=P                             33                      20            16            28
Bankruptcy=B                                  4                       1            87            16
Bankruptcy=NB                                66                      58             7            57
                        Credibility=P Competitiveness=N Competitiveness=A Competitiveness=P
Industrial.Risk=N                  27                54                14                23
Industrial.Risk=A                  32                27                21                31
Industrial.Risk=P                  24                24                18                38
Management.Risk=N                  29                70                21                29
Management.Risk=A                  24                21                10                35
Management.Risk=P                  30                14                22                28
Financial.Flexibility=N            18                99                 7                15
Financial.Flexibility=A            36                 4                30                36
Financial.Flexibility=P            29                 2                16                41
Credibility=N                       0                84                 4                 6
Credibility=A                       0                17                21                35
Credibility=P                      83                 4                28                51
Competitiveness=N                   4               105                 0                 0
Competitiveness=A                  28                 0                53                 0
Competitiveness=P                  51                 0                 0                92
Operating.Risk=N                   27                64                15                35
Operating.Risk=A                   20                21                12                23
Operating.Risk=P                   36                20                26                34
Bankruptcy=B                        4               104                 3                 0
Bankruptcy=NB                      79                 1                50                92
                        Operating.Risk=N Operating.Risk=A Operating.Risk=P Bankruptcy=B
Industrial.Risk=N                     52               19               20           54
Industrial.Risk=A                     25               27               27           27
Industrial.Risk=P                     37               10               33           26
Management.Risk=N                     65               29               26           73
Management.Risk=A                     23               22               21           21
Management.Risk=P                     26                5               33           13
Financial.Flexibility=N               62               32               27          102
Financial.Flexibility=A               25               12               33            4
Financial.Flexibility=P               27               12               20            1
Credibility=N                         58               20               16           87
Credibility=A                         29               16               28           16
Credibility=P                         27               20               36            4
Competitiveness=N                     64               21               20          104
Competitiveness=A                     15               12               26            3
Competitiveness=P                     35               23               34            0
Operating.Risk=N                     114                0                0           64
Operating.Risk=A                       0               56                0           24
Operating.Risk=P                       0                0               80           19
Bankruptcy=B                          64               24               19          107
Bankruptcy=NB                         50               32               61            0
                        Bankruptcy=NB
Industrial.Risk=N                  37
Industrial.Risk=A                  52
Industrial.Risk=P                  54
Management.Risk=N                  47
Management.Risk=A                  45
Management.Risk=P                  51
Financial.Flexibility=N            19
Financial.Flexibility=A            66
Financial.Flexibility=P            58
Credibility=N                       7
Credibility=A                      57
Credibility=P                      79
Competitiveness=N                   1
Competitiveness=A                  50
Competitiveness=P                  92
Operating.Risk=N                   50
Operating.Risk=A                   32
Operating.Risk=P                   61
Bankruptcy=B                        0
Bankruptcy=NB                     143

Vemos aquí que el número más elevado se obtiene entre la combinación de Bankruptcy = B y Financial.Flexibility = N.

Reglas de asociación con support = 10% y confidence = 100%.

  • Support. El soporte de una regla de asociación se refiere a la proporción de transacciones en un conjunto de datos que contienen todos los elementos que forman parte de la regla. En este caso, un support del 10% significa que una regla debe aplicarse al menos al 10% de las transacciones del conjunto de datos para considerarse significativa.

  • Confidence. La confianza de una regla de asociación se refiere a la probabilidad condicional de que la parte consecuente de la regla (el lado derecho) ocurra en una transacción, dado que la parte antecedente de la regla (el lado izquierdo) también ocurra en la misma transacción. Una confidence del 100% significa que cada vez que se cumplen las condiciones en el lado izquierdo de la regla, el resultado en el lado derecho también ocurre siempre.

Al definir reglas de asociación con un support del 10% y una confidence del 100%, se están buscando reglas que sean relativamente comunes en el conjunto de datos (al menos el 10% de las transacciones) y que tengan una certeza absoluta en cuanto a su aplicación Utilizamos la función apriori() del paquete arules para este cometido.

Se han obtenido un total de 88 reglas (ver código ejecutado para ello, aquí no se muestra en aras de brevedad y claridad.)

Las reglas pueden representarse en un grafo interactivo:

Figure 5. Grafo de las reglas con un support = 10% y confidence = 100%

Resulta obvio de ver que en el grafo tenemos 2 zonas bien diferenciadas: por una la que se relaciona con Bankruptcy = B y por otra la que se relaciona con Bankruptcy = NB.

Se muestran a continuación las 3 primeras reglas ordenadas por lift. Esto es lo que nos dice si una regla es predictiva o no predictiva, siendo la confianza corregida por la consecuencia.

\[\textrm{lift} = \frac{\textrm{conf}}{\textrm{support of consequent}}\]

Un lift mayor que 1 indica que la ocurrencia de los elementos del antecedente de la regla aumenta la probabilidad de que ocurran los elementos del consecuente en comparación con su ocurrencia general. Esto sugiere una asociación positiva entre los elementos del antecedente y del consecuente.

El lift nos permite entender la importancia relativa de una regla de asociación al comparar su ocurrencia con la ocurrencia esperada en ausencia de la regla.

    lhs                           rhs                 support confidence coverage     lift count
[1] {Industrial.Risk=P,                                                                         
     Bankruptcy=B}             => {Credibility=N}       0.104          1    0.104 2.659574    26
[2] {Industrial.Risk=P,                                                                         
     Financial.Flexibility=N,                                                                   
     Bankruptcy=B}             => {Credibility=N}       0.104          1    0.104 2.659574    26
[3] {Industrial.Risk=A,                                                                         
     Bankruptcy=B}             => {Competitiveness=N}   0.108          1    0.108 2.380952    27

Vemos que las reglas mostradas cuentan con un valor de lift suficientemente elevado para su credibilidad.

Reglas de asociación con antecedente Bankruptcy = B.

A continuación obtenemos las reglas de asociación que tengan como antecedente Bankruptcy = B. Reduciremos el número de reglas utilizando las condiciones lift > 2 y count > 50.

    lhs                           rhs                 support confidence coverage     lift count
[1] {Industrial.Risk=N,                                                                         
     Bankruptcy=B}             => {Competitiveness=N}   0.216          1    0.216 2.380952    54
[2] {Operating.Risk=N,                                                                          
     Bankruptcy=B}             => {Competitiveness=N}   0.256          1    0.256 2.380952    64
[3] {Credibility=N,                                                                             
     Operating.Risk=N,                                                                          
     Bankruptcy=B}             => {Competitiveness=N}   0.216          1    0.216 2.380952    54
[4] {Financial.Flexibility=N,                                                                   
     Operating.Risk=N,                                                                          
     Bankruptcy=B}             => {Competitiveness=N}   0.240          1    0.240 2.380952    60

Podemos representar las reglas (sin aplicar las condiciones) haciendo uso de plot().

To reduce overplotting, jitter is added! Use jitter = 0 to prevent jitter.

Figure 6. Ubicación de las reglas con atecedente Bankruptcy = B en el espacio lift-support, coloreadas por su count.

Figure 7. Grafo de las reglas con antecedente Bankruptcy = B con lift > 2 y count > 50.

Un patrón interesante es que todas estas reglas tienen como consecuente (rhs) Competitiveness = N.

Reglas de asociación en las que no está Bankruptcy (ni lhs ni rhs).

Se utiliza un subset() con lo obtenido anteriormente para que no aparezca dicha variable, hallándose un total de 8 reglas.

set of 8 rules

rule length distribution (lhs + rhs):sizes
3 4 5 
2 5 1 

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  3.000   3.750   4.000   3.875   4.000   5.000 

summary of quality measures:
    support        confidence    coverage          lift           count      
 Min.   :0.108   Min.   :1    Min.   :0.108   Min.   :2.066   Min.   :27.00  
 1st Qu.:0.114   1st Qu.:1    1st Qu.:0.114   1st Qu.:2.381   1st Qu.:28.50  
 Median :0.138   Median :1    Median :0.138   Median :2.381   Median :34.50  
 Mean   :0.139   Mean   :1    Mean   :0.139   Mean   :2.342   Mean   :34.75  
 3rd Qu.:0.152   3rd Qu.:1    3rd Qu.:0.152   3rd Qu.:2.381   3rd Qu.:38.00  
 Max.   :0.200   Max.   :1    Max.   :0.200   Max.   :2.381   Max.   :50.00  

mining info:
        data ntransactions support confidence
 QBt$cluster           250     0.1          1
                                                                                                        call
 apriori(data = QBt$cluster, parameter = list(support = support, confidence = confidence, target = "rules"))
    lhs                           rhs                       support confidence coverage     lift count
[1] {Industrial.Risk=A,                                                                               
     Competitiveness=N}        => {Financial.Flexibility=N}   0.108          1    0.108 2.066116    27
[2] {Industrial.Risk=N,                                                                               
     Credibility=N}            => {Competitiveness=N}         0.152          1    0.152 2.380952    38
[3] {Industrial.Risk=N,                                                                               
     Management.Risk=N,                                                                               
     Credibility=N}            => {Competitiveness=N}         0.108          1    0.108 2.380952    27
[4] {Industrial.Risk=N,                                                                               
     Financial.Flexibility=N,                                                                         
     Credibility=N}            => {Competitiveness=N}         0.136          1    0.136 2.380952    34
[5] {Industrial.Risk=N,                                                                               
     Management.Risk=N,                                                                               
     Financial.Flexibility=N}  => {Competitiveness=N}         0.152          1    0.152 2.380952    38
[6] {Financial.Flexibility=N,                                                                         
     Credibility=N,                                                                                   
     Operating.Risk=N}         => {Competitiveness=N}         0.200          1    0.200 2.380952    50
[7] {Management.Risk=N,                                                                               
     Financial.Flexibility=N,                                                                         
     Operating.Risk=N}         => {Competitiveness=N}         0.140          1    0.140 2.380952    35
[8] {Management.Risk=N,                                                                               
     Financial.Flexibility=N,                                                                         
     Credibility=N,                                                                                   
     Operating.Risk=N}         => {Competitiveness=N}         0.116          1    0.116 2.380952    29

Pasa a graficarse a continuación en modo de grafo lo obtenido:

Figure 8. Grafo de las reglas que no tienen Bankruptcy ni en atecedente ni consecuente.

Las reglas de asociación, incluso cuando no incluyen la variable objetivo, pueden ser valiosas para comprender relaciones entre otras variables en el conjunto de datos. Destaca aquí por ejemplo la regla de {Financial.Flexibility = N, Credibility = N, Operating.Risk = N} => {Competitiveness = N}.

La regla sugiere que cuando una empresa afronta dificultades financieras, falta de credibilidad y alto riesgo operativo, es probable que la competitividad se vea afectada negativamente.

Predicción con reglas de asociación

Pasamos ahora a desarrollar un modelo de clasificación basado en Reglas de Asociación para estimar la bancarrota. Se hallará la bondad del modelo (sensibilidad y especifidad), diviendo el conjunto de datos en training (80%) y testing (20%).

Dividimos nuestro conjunto de datos en train y test con una proporción de 80% - 20%, respectivamente. Para hallo hacemos usado de la función createDataPartition del paquete caret.

Puede comprobarse que la proporción de clases en train y test es prácticamente la misma:

OneR

Veamos primero lo que nos ofrece el modelo de OneR. Este es un algoritmo de clasificación simple, pero preciso, que genera una regla para cada predictor en los datos, y luego selecciona la regla con el error total más pequeño como su “regla única”.


Call:
OneR.formula(formula = Bankruptcy ~ ., data = trainData)

Rules:
If Competitiveness = N then Bankruptcy = B
If Competitiveness = A then Bankruptcy = NB
If Competitiveness = P then Bankruptcy = NB

Accuracy:
198 of 201 instances classified correctly (98.51%)

Contingency table:
          Competitiveness
Bankruptcy    N    A    P Sum
       B   * 84    2    0  86
       NB     1 * 39 * 75 115
       Sum   85   41   75 201
---
Maximum in each column: '*'

Pearson's Chi-squared test:
X-squared = 189.19, df = 2, p-value < 2.2e-16

Vemos que se obtiene una accuracy del 98% (en conjunto de train) con un modelo tan sencillo de regla única, lo cual es bastante sorprendente. El p-valor tan bajo indica que hay una asociación significativa entre las variables de Competitiveness y Bankruptcy.

Veamos qué nos ofrece la función confusionMatrix del paquete caret al aplicarla a nuestro conjunto de train.

Confusion Matrix and Statistics

          Reference
Prediction   B  NB
        B   84   1
        NB   2 114
                                         
               Accuracy : 0.9851         
                 95% CI : (0.957, 0.9969)
    No Information Rate : 0.5721         
    P-Value [Acc > NIR] : <2e-16         
                                         
                  Kappa : 0.9695         
                                         
 Mcnemar's Test P-Value : 1              
                                         
            Sensitivity : 0.9767         
            Specificity : 0.9913         
         Pos Pred Value : 0.9882         
         Neg Pred Value : 0.9828         
             Prevalence : 0.4279         
         Detection Rate : 0.4179         
   Detection Prevalence : 0.4229         
      Balanced Accuracy : 0.9840         
                                         
       'Positive' Class : B              
                                         

La sensibilidad (Sensivity) representa la proporción de positivos reales que se clasificaron correctamente como positivos, mientras que la especificidad (Specifity) representa la proporción de negativos reales que se clasificaron correctamente como negativos.

Confusion Matrix and Statistics

          Reference
Prediction  B NB
        B  20  0
        NB  1 28
                                          
               Accuracy : 0.9796          
                 95% CI : (0.8915, 0.9995)
    No Information Rate : 0.5714          
    P-Value [Acc > NIR] : 4.656e-11       
                                          
                  Kappa : 0.9581          
                                          
 Mcnemar's Test P-Value : 1               
                                          
            Sensitivity : 0.9524          
            Specificity : 1.0000          
         Pos Pred Value : 1.0000          
         Neg Pred Value : 0.9655          
             Prevalence : 0.4286          
         Detection Rate : 0.4082          
   Detection Prevalence : 0.4082          
      Balanced Accuracy : 0.9762          
                                          
       'Positive' Class : B               
                                          

En el conjunto de testing se obtuvo un accuracy de 1 para esta partición de los datos, si bien es cierto que el intervalo de confianza del 95% de esta va hasta 0.9275 en la cota inferior.

CBA

Las siglas de CBA responden a Classification Based on Associations.

En CBA, se extraen reglas de asociación a partir de los datos y luego se utilizan estas reglas para clasificar nuevas instancias. Estas reglas de asociación pueden proporcionar información sobre cómo las variables predictoras están relacionadas entre sí y con la variable objetivo.

En el proceso general se tiene:

  • Extracción de reglas de asociación: con algoritmos como APRIORI.
  • Generación de reglas de clasificación.
  • Clasificación de nuevas instancias.

Pasemos a aplicar el modelo con un support = 0.2 y confidence = 1.

Pasamos a inspeccionar las reglas de este:

    lhs                                             rhs             support   confidence coverage 
[1] {Financial.Flexibility=N, Competitiveness=N} => {Bankruptcy=B}  0.4029851 1.0000000  0.4029851
[2] {Credibility=N, Competitiveness=N}           => {Bankruptcy=B}  0.3432836 1.0000000  0.3432836
[3] {Financial.Flexibility=N, Credibility=N}     => {Bankruptcy=B}  0.3432836 1.0000000  0.3432836
[4] {Industrial.Risk=N, Competitiveness=N}       => {Bankruptcy=B}  0.2089552 1.0000000  0.2089552
[5] {Competitiveness=P}                          => {Bankruptcy=NB} 0.3731343 1.0000000  0.3731343
[6] {}                                           => {Bankruptcy=NB} 0.5721393 0.5721393  1.0000000
    lift     count size coveredTransactions totalErrors
[1] 2.337209  81   3    81                  5          
[2] 2.337209  69   3     2                  3          
[3] 2.337209  69   3     2                  1          
[4] 2.337209  42   3     1                  0          
[5] 1.747826  75   2    75                  5          
[6] 1.000000 201   1    40                  0          

Se muestra el plot y grafo:

To reduce overplotting, jitter is added! Use jitter = 0 to prevent jitter.

Figure 9. Ubicación de las reglas en el espacio lift-support.

Figure 10. Grafo de las reglas del modelo de CBA escogido (support = 0.2, confidence = 1).

Evaluamos el modelo CBA sobre los conjuntos de entrenamiento y test:

Confusion Matrix and Statistics

          Reference
Prediction   B  NB
        B   86   0
        NB   0 115
                                     
               Accuracy : 1          
                 95% CI : (0.9818, 1)
    No Information Rate : 0.5721     
    P-Value [Acc > NIR] : < 2.2e-16  
                                     
                  Kappa : 1          
                                     
 Mcnemar's Test P-Value : NA         
                                     
            Sensitivity : 1.0000     
            Specificity : 1.0000     
         Pos Pred Value : 1.0000     
         Neg Pred Value : 1.0000     
             Prevalence : 0.4279     
         Detection Rate : 0.4279     
   Detection Prevalence : 0.4279     
      Balanced Accuracy : 1.0000     
                                     
       'Positive' Class : B          
                                     

Obtenemos en el propio conjunto de training un accuracy de 1, lo que resulta algo mejor que en el modelo de regla única del OneR.

Confusion Matrix and Statistics

          Reference
Prediction  B NB
        B  21  0
        NB  0 28
                                     
               Accuracy : 1          
                 95% CI : (0.9275, 1)
    No Information Rate : 0.5714     
    P-Value [Acc > NIR] : 1.233e-12  
                                     
                  Kappa : 1          
                                     
 Mcnemar's Test P-Value : NA         
                                     
            Sensitivity : 1.0000     
            Specificity : 1.0000     
         Pos Pred Value : 1.0000     
         Neg Pred Value : 1.0000     
             Prevalence : 0.4286     
         Detection Rate : 0.4286     
   Detection Prevalence : 0.4286     
      Balanced Accuracy : 1.0000     
                                     
       'Positive' Class : B          
                                     

En el conjunto de test también se obtiene un accuracy de 1.

¿Cómo varía la evaluación según el método utilizado para discretizar?

La evaluación de los modelos se realizó anteriormente solo con cluster, puesto que se determinó que sería el más ideal para predecir de manera correcta. A continuación se muestran los resultados que se obtendrían para uno de los otros dos métodos, tanto en conjunto de training como de testing.

[1] "Matriz de confusión para interval en conjunto de entrenamiento:"
Confusion Matrix and Statistics

          Reference
Prediction   B  NB
        B   85   0
        NB   1 115
                                          
               Accuracy : 0.995           
                 95% CI : (0.9726, 0.9999)
    No Information Rate : 0.5721          
    P-Value [Acc > NIR] : <2e-16          
                                          
                  Kappa : 0.9898          
                                          
 Mcnemar's Test P-Value : 1               
                                          
            Sensitivity : 0.9884          
            Specificity : 1.0000          
         Pos Pred Value : 1.0000          
         Neg Pred Value : 0.9914          
             Prevalence : 0.4279          
         Detection Rate : 0.4229          
   Detection Prevalence : 0.4229          
      Balanced Accuracy : 0.9942          
                                          
       'Positive' Class : B               
                                          
[1] "Matriz de confusión para interval en conjunto de prueba:"
Confusion Matrix and Statistics

          Reference
Prediction  B NB
        B  21  0
        NB  0 28
                                     
               Accuracy : 1          
                 95% CI : (0.9275, 1)
    No Information Rate : 0.5714     
    P-Value [Acc > NIR] : 1.233e-12  
                                     
                  Kappa : 1          
                                     
 Mcnemar's Test P-Value : NA         
                                     
            Sensitivity : 1.0000     
            Specificity : 1.0000     
         Pos Pred Value : 1.0000     
         Neg Pred Value : 1.0000     
             Prevalence : 0.4286     
         Detection Rate : 0.4286     
   Detection Prevalence : 0.4286     
      Balanced Accuracy : 1.0000     
                                     
       'Positive' Class : B          
                                     
[1] "Matriz de confusión para frequency en conjunto de entrenamiento:"
Confusion Matrix and Statistics

          Reference
Prediction   B  NB
        B   66   0
        NB  20 115
                                          
               Accuracy : 0.9005          
                 95% CI : (0.8505, 0.9382)
    No Information Rate : 0.5721          
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.7906          
                                          
 Mcnemar's Test P-Value : 2.152e-05       
                                          
            Sensitivity : 0.7674          
            Specificity : 1.0000          
         Pos Pred Value : 1.0000          
         Neg Pred Value : 0.8519          
             Prevalence : 0.4279          
         Detection Rate : 0.3284          
   Detection Prevalence : 0.3284          
      Balanced Accuracy : 0.8837          
                                          
       'Positive' Class : B               
                                          
[1] "Matriz de confusión para frequency en conjunto de prueba:"
Confusion Matrix and Statistics

          Reference
Prediction  B NB
        B  17  0
        NB  4 28
                                         
               Accuracy : 0.9184         
                 95% CI : (0.804, 0.9773)
    No Information Rate : 0.5714         
    P-Value [Acc > NIR] : 9.314e-08      
                                         
                  Kappa : 0.8293         
                                         
 Mcnemar's Test P-Value : 0.1336         
                                         
            Sensitivity : 0.8095         
            Specificity : 1.0000         
         Pos Pred Value : 1.0000         
         Neg Pred Value : 0.8750         
             Prevalence : 0.4286         
         Detection Rate : 0.3469         
   Detection Prevalence : 0.3469         
      Balanced Accuracy : 0.9048         
                                         
       'Positive' Class : B              
                                         

Vemos que con el método de frequency se obtienen resultados bastante peores, tal y como se podía intuir (la discretización deja mucho que desear) en la Figura 2. El método de interval obtiene resultados similares que los que vimos en cluster.

Conclusiones del modelo basado en reglas

Se obtuvieron resultados ligeramente mejores con el modelo CBA frente al modelo de OneR, llegando a un accuracy de 1 tanto en conjunto de training como de test con el método de cluster de discretize(). En el modelo de CBA se emplearon todas las variables, ya que se consideró que todas podrían ser de ayuda a la hora de buscar relaciones. Eso sí, se estableció un support mínimo de 0.2 y un confidence de 1 con el fin de tratar de hallar reglas de cierto nivel de calidad para la predicción.

En resumen, podemos decir que los modelos utilizados resultaron muy efectivos para predecir la variable objetivo Bankruptcy en este conjunto de datos, dándonos una idea de la potencia que tienen cuando se tienen escaso número de datos.